A data storage system environment typically includes one or more host computing devices (“hosts”) in communication with one or more storage arrays. A host typically executes an application program (e.g., a database application) which requires data associated with the application to be stored locally (i.e., on the host), remotely (i.e., on one of the storage arrays), or stored both locally and remotely. The host typically includes memory devices that provide both volatile random access memory capacity (e.g., Dynamic RAM or DRAM devices) and non-volatile random access memory capacity (e.g., flash memory devices). The storage array typically includes storage devices that provide non-volatile random access storage capacity (e.g., flash memory devices) and non-volatile large storage capacity (e.g., hard disk drives (HDDs) and tape drives). In general, random access memory is used to satisfy high throughput and/or bandwidth requirements of a given application program while the hard disk and tape drives are used to satisfy capacity requirements.
In a data storage environment, the ability to define multiple, independent memory tiers is desired. A memory tier is typically constructed by memory mapping a region of a storage class memory (SCM) device (e.g., a flash memory) or a region of an array storage device into the process's virtual memory address space. The memory-mapped regions may be fronted by a DRAM page cache to which the application issues loads and stores. Memory tiering applications move data between the SCM (or array device) and the DRAM page cache on an on-demand page basis.